﻿using System;

namespace 泛型
{
	class Program
	{
		//泛型实现了类型参数化来达到代码重复利用
		//通过类型参数化实现同一份代码上操作多种类型


		//泛型占位字母 一般用任意大写字母 （一般用T）
		//泛型类和泛型接口
		//基本语法：
		//class 类名<泛型占位字母>
		//interface 接口名<泛型占位字母>

		//泛型函数
		//基本语法： 函数名<泛型占位字母>(参数列表)

		//注意：泛型占位字母可以有多个，用逗号分开
		static void Main(string[] args)
		{
			Test<int> test = new Test<int>();
			test.Hello<string, int>("你好", 2);
		}

		public void Test<T>()
		{
			//用泛型类型来做一些逻辑处理
			T t = default(T);
			//typeof(T);
		}

		public T GetT<T>(string str)
		{
			return default(T);
		}
	}

	//泛型类
	class Test<T> : ITest<T>
	{
		public T value;
		//泛型函数
		public void Hello<U, I>(U str, I arr)
		{
			Console.WriteLine("Hello" + str);
		}
	}
	//泛型接口
	interface ITest<T>
	{
		public void Hello<U, I>(U str, I arr);
	}
}
